package com.qfoud.edu.dbutils.framwork.result.impl;

import com.qfoud.edu.dbutils.framwork.result.base.ResultSetHandler;
import org.apache.commons.beanutils.BeanUtils;

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.List;

/**
 * @author xiaobobo
 * @title: BeanListHandler
 * @projectName cd-java-2303-project-parent
 * @description: TODO
 * @date 2023/5/11  10:06
 */
public class BeanListHandler<T> implements ResultSetHandler<List<T>> {

    private Class clazz;

    public BeanListHandler( Class clazz){
        this.clazz=clazz;
    }

    public List<T> handler(ResultSet resultSet) throws Exception {
        //遍历这个结果集
        //申明一个存储数据的容器
        List<T> tList=new ArrayList<T>();
        //获取结果集的元数据
        ResultSetMetaData metaData = resultSet.getMetaData();
        //获取列的数量
        int columnCount = metaData.getColumnCount();
        //遍历我们的行数据
        while (resultSet.next()){
            //获取类的对象
            T t= (T) clazz.newInstance();
            //遍历列的数据
            for (int i = 0; i <columnCount ; i++) {
                String columnName = metaData.getColumnName(i + 1);
                //通过列的名字获取这个列的值
                Object columnVal = resultSet.getObject(columnName);
                //接下来就可以封装这个数据了
                BeanUtils.copyProperty(t,columnName,columnVal);
            }
            tList.add(t);
        }
        return tList;
    }
}
